<?php

/**
 * @name SBShop
 * @author Mukharev Maxim
 * @version 0.1a
 *
 * @desription
 *
 * Электронный магазин для MODx
 *
 * Экшен модуля электронного магазина: Управление товарами
 *
 */

class update_mode {

	protected $sModuleLink;
	protected $sMode;
	protected $sAct;

	/**
	 * Конструктор
	 * @param $sModuleLink Ссылка на модуль
	 * @param $sMode Режим работы модуля
	 * @param $sAct Выполняемое действие
	 */
	public function __construct($sModuleLink, $sMode, $sAct = '') {
		/**
		 * Записываем служебную информацию модуля, чтобы делать разные ссылки
		 */
		$this->sModuleLink = $sModuleLink;
		$this->sMode = $sMode;
		$this->sAct = $sAct;

		$this->aProductOptions = array();

		//$this->updateProducts();

		echo '<p>Если вы ожидали, что здесь скрывается автоматическое обновление, то зря. Для работы необхожимо раскомментировать необходимую строку у режима модуля update.</p>';

	}

	/**
	 * Обновление информации товаров
	 */
	protected function updateProducts() {
		global $modx;

		$rs = $modx->db->select('product_id, product_options',$modx->getFullTableName('sbshop_products'));
		$aRaws = $modx->db->makeArray($rs);

		var_dump('<pre>');
		foreach ($aRaws as $aRaw) {
			$aOptions = $this->unserializeOptions($aRaw['product_options']);
			/**
			 * Сериализуем иначе
			 */
			$sOptions = base64_encode(serialize($aOptions));
			/**
			 * Обновляем в базе данных
			 */
			if($modx->db->update(array('product_options' => $sOptions),$modx->getFullTableName('sbshop_products'),'product_id = ' . $aRaw['product_id'])) {
				var_dump('Обновлены опции у товара: ' . $aRaw['product_id']);
			}

		}
		var_dump('</pre>');
	}

	/**
	 * Десериализация данных по опциям
	 * @param <type> $sOptions
	 * @return <type>
	 */
	public function unserializeOptions($sOptions) {
		/**
		 * Результирующий массив опций
		 */
		$aOptions = array();
		/**
		 * Если пустое поле
		 */
		if($sOptions != '') {
			/**
			 * Разбиваем запись на отдельные параметры
			 */
			$aRows = explode('||', $sOptions);
			/**
			 * Обрабатываем каждую запись
			 */
			foreach ($aRows as $sRow) {
				/**
				 * Массив значений опции
				 */
				$aValues = array();
				/**
				 * Выделяем имя
				 */
				list($sName,$sParams) = explode('[', substr($sRow, 0, -1));
				/**
				 * Разбиваем название опции на ключ и идентификатор
				 */
				list($sNameKey,$sNameId) = explode('#', $sName);
				/**
				 * Разбиваем параметры
				 */
				$aParams = explode(';', $sParams);
				/**
				 * Обрабатываем каждый параметр
				 */
				foreach ($aParams as $sParam) {
					/**
					 * Разбиваем строку на параметр и значение
					 */
					list($sParamKey,$sParamVal) = explode('==', $sParam);
					/**
					 * Разбиваем название параметра для получения ID (если есть)
					 */
					list($sParamKey,$sParamId) = explode('#', $sParamKey);
					/**
					 * Добавляем значение
					 */
					$aValues[$sParamId] = array(
						'id' => $sParamId,
						'title' => $sParamKey,
						'value' => $sParamVal
					);
				}
				/**
				 * Добавляем новую опцию
				 */
				$aOptions[$sNameId] = array(
					'id' => $sNameId,
					'title' => $sNameKey,
					'longtitle' => $sNameKey,
					'values' => $aValues
				);
			}
		}
		/**
		 * Возвращаем результат
		 */
		return $aOptions;
	}


}

?>